﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace TCPSockets.Enumirators
{
    /// <summary>
    /// Индексатор клиентов в классе CTCPServer
    /// </summary>
    public class ClientEnumerator : IEnumerator<CTCPClient>
    {
        /// <summary>
        /// Индексируемый сервер
        /// </summary>
        public CTCPServer Server;

        /// <summary>
        /// Текущий номер клиента
        /// </summary>
        public int Index = -1;

        /// <summary>
        /// Конструктор по индексируемому серверу
        /// </summary>
        public ClientEnumerator(CTCPServer Server)
        {
            this.Server = Server;
        }

        #region IEnumerator<CTCPClient> Members

        /// <summary>
        /// Текущий клиент
        /// </summary>
        public CTCPClient Current { get { return Server[Index]; } }

        /// <summary>
        /// Текущий элемент
        /// </summary>
        object IEnumerator.Current { get { return Current; } }

        /// <summary>
        /// Переход к следующему индексируемому клиенту
        /// </summary>
        /// <remarks>Переход может быть неудачным, если индекс вышел за пределы индексирования</remarks>
        /// <returns>Возращает истину, если переход удался, и ложь в противном случае</returns>
        public bool MoveNext()
        {
            Index++;
            if(Index >= Server.ClientCount)
                return false;
            return true;
        }

        /// <summary>
        /// Сброс индексатора
        /// </summary>
        public void Reset() { Index = -1; }

        /// <summary>
        /// Текущий клиент
        /// </summary>
        CTCPClient IEnumerator<CTCPClient>.Current { get { return Server[Index]; } }

        /// <summary>
        /// Переход к следующему индексируемому элементу
        /// </summary>
        /// <remarks>Переход считается удачным, если индекс элемента лежит в пределах от 0 до числа элементов - 1</remarks>
        /// <returns>Водзращает истину, если переход удался и ложь в противном случае</returns>
        bool IEnumerator.MoveNext() { return MoveNext(); }

        void IEnumerator.Reset() { Reset(); }

        #endregion

        #region IDisposable Members

       public void Dispose()
        {

        }

        void IDisposable.Dispose() { Dispose(); }

        #endregion
    }
}
